package com.fintech.third.service.facerecog;

import java.util.Date;
import java.util.Map;

import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;

import com.alibaba.fastjson.JSON;
import com.fintech.common.enums.RespStatus;
import com.fintech.common.service.BaseServiceImpl;
import com.fintech.common.util.PropertiesUtils;
import com.fintech.third.constant.LocalStatus;
import com.fintech.third.constant.ThirdMethodConstants;
import com.fintech.third.constant.ThirdProductChannelConstant;
import com.fintech.third.model.ThirdProperties;
import com.fintech.third.model.facerecog.FaceCompareResponse;
import com.fintech.third.model.facerecog.IdCardOcrResult;
import com.fintech.third.model.facerecog.OcrResult;
import com.fintech.third.utils.HttpUtil;
import com.fintech.third.utils.ThirdPropertiesInitUtil;
import com.marvels.common.utils.MarvelsLogUtil;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

@Service("YiTu")
public class YiTuImpl extends BaseServiceImpl implements YiTuService {

	@Override
	public FaceCompareResponse idCardVerification(Map<String, String> map) {
		FaceCompareResponse faceCompareResponse = new FaceCompareResponse();
		/*
		 * 如果接口停用，直接返回（视具体情况，有的返回停用，有的返回相关值） ADD BY TUXU 2018-05-31
		 */
		if (PropertiesUtils.isTurnOffForSwitch("switch.yt0001")) {
			// RespStatus.DISABLE只有接口停用时才使用定义的这个参数，其它情况按原本的来
			faceCompareResponse.setErrorCode(RespStatus.DISABLE.getCode());
			faceCompareResponse.setErrorMsg(RespStatus.DISABLE.getMsg());
			return faceCompareResponse;
		}
		String status = LocalStatus.REQUEST_FAIL.getCode(); // 默认请求失败
		String thirdCode = null;
		Date startDate = new Date();
		Date responseDate = null;
		ThirdProperties thirdProperties = ThirdPropertiesInitUtil.getThirdProperties();
		faceCompareResponse.setChannelCode(ThirdProductChannelConstant.YITU.getCode());
		JSONObject json = new JSONObject();
		JSONObject userInfo = new JSONObject();
		JSONObject options = new JSONObject();
		JSONObject uploadIdcardImage = new JSONObject();
		JSONObject verifyQueryImage = new JSONObject();
		JSONObject verifyQueryImageUI = new JSONObject();
		JSONObject verifyQueryImageOp = new JSONObject();
		userInfo.put("name", map.get("name"));
		userInfo.put("citizen_id", map.get("citizen_id"));
		options.put("auto_rotate", true);
		uploadIdcardImage.put("user_info", userInfo);
		uploadIdcardImage.put("options", options);
		verifyQueryImageUI.put("image_content",
				"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");
		verifyQueryImage.put("user_info", verifyQueryImageUI);
		verifyQueryImageOp.put("auto_rotate", true);
		verifyQueryImageOp.put("true_negative_rate", "99.99");
		verifyQueryImage.put("options", verifyQueryImageOp);
		json.put("upload_idcard_image", uploadIdcardImage);
		json.put("verify_query_image", verifyQueryImage);
		String result = "";
		JSONObject resultJson = new JSONObject();
		MarvelsLogUtil.getInstance().info("===========>>依图身份证姓名验证,loanId" + map.get("loanId") + ",请求:" + json.toString());
		try {
			result = HttpUtil.httpPostYT(thirdProperties.getYt_idCardVerifyUrl(), json.toString());
			responseDate = new Date();
			MarvelsLogUtil.getInstance().info("===========>>依图身份证姓名验证,loanId" + map.get("loanId") + ",请求响应:" + result);
			if(!StringUtils.isEmpty(result)){
				status = LocalStatus.IN_DATABASE_FAIL.getCode();
				resultJson = JSONObject.fromObject(result);
				if ((Integer) resultJson.get("rtn") != 0) {
					faceCompareResponse.setErrorCode(-1);
					faceCompareResponse.setErrorMsg(resultJson.get("message").toString());
					faceCompareResponse.setChannelCode(ThirdProductChannelConstant.YITU.getCode());
					
					status = LocalStatus.CALL_SUCCESS.getCode(); // 调用成功但业务数据返回非成功状态
					thirdCode = resultJson.get("rtn") + "";
				}else{
					JSONObject identifyResult = resultJson.getJSONObject("identify_result");
					boolean is_valid = identifyResult.getBoolean("is_valid");
					faceCompareResponse.setErrorCode(0);
					faceCompareResponse.setTrue(is_valid);
					faceCompareResponse.setErrorMsg(identifyResult.getString("message"));
					
					status = LocalStatus.SUCCESS_WITH_DATA.getCode(); // 查询成功且有数据
					thirdCode = resultJson.get("rtn") + "";
				}
			}else{
				faceCompareResponse.setErrorCode(-1);
				faceCompareResponse.setErrorMsg("返回结果为空");
				faceCompareResponse.setChannelCode(ThirdProductChannelConstant.YITU.getCode());

				status = LocalStatus.CALL_SUCCESS.getCode(); // 调用成功但业务数据返回非成功状态
			}
		} catch (Exception e) {
			MarvelsLogUtil.getInstance().error("===========>>依图身份证姓名验证响应异常,loanId" + map.get("loanId"),e);
			faceCompareResponse.setErrorCode(-1);
			faceCompareResponse.setErrorMsg("依图身份证姓名验证响应异常");
			faceCompareResponse.setChannelCode(ThirdProductChannelConstant.YITU.getCode());
			
		}
		saveDataQueryLog(null, map.get("loanId"),
				null, null, startDate, responseDate, ThirdMethodConstants.YT0001, thirdCode, status,
				"edc_yt_data_query_log", "system");
		return faceCompareResponse;
	}

	@Override
	public FaceCompareResponse comparisonService(Map<String, String> map) {
		FaceCompareResponse faceCompareResponse = new FaceCompareResponse();
		/*
		 * 如果接口停用，直接返回（视具体情况，有的返回停用，有的返回相关值） ADD BY TUXU 2018-05-31
		 */
		if (PropertiesUtils.isTurnOffForSwitch("switch.yt0002")) {
			// RespStatus.DISABLE只有接口停用时才使用定义的这个参数，其它情况按原本的来
			faceCompareResponse.setErrorCode(RespStatus.DISABLE.getCode());
			faceCompareResponse.setErrorMsg(RespStatus.DISABLE.getMsg());
			return faceCompareResponse;
		}
		String status = LocalStatus.REQUEST_FAIL.getCode(); // 默认请求失败
		String thirdCode = null;
		Date startDate = new Date();
		Date responseDate = null;
		ThirdProperties thirdProperties = ThirdPropertiesInitUtil.getThirdProperties();
		// JSONObject json=new JSONObject();
		// json.put("database_image_type",101);
		// json.put("query_image_type",301);
		// json.put("true_negative_rate", "99.9");
		// json.put("citizen_id", map.get("citizen_id"));
		// json.put("auto_rotate_for_query",true);
		// json.put("auto_rotate_for_database",true);
		// MarvelsLogUtil.getInstance().info("===========>>依图人脸对比,loanId"+map.get("loanId")+",请求:"+json.toString());
		// String imgFilePath =
		// SystemUtil.class.getResource(thirdProperties.getImage_path()).getPath()
		// +json.get("citizen_id").toString()+".jpg";// 新生成的图片
		// try {
		// json.put("database_image_content",
		// Base64Util.getImageStrByCodec(imgFilePath));
		// json.put("query_image_content", map.get("query_image_content"));
		// } catch (IOException e1) {
		// e1.printStackTrace();
		// }
		// JSONObject json=new JSONObject();
		// json.put("query_image_package",map.get("query_image_content"));
		// json.put("database_image_type",101);
		// json.put("query_image_package_return_image_list", true);
		// json.put("query_image_package_check_same_person",true);
		// json.put("auto_rotate_for_database",true);
		// json.put("true_negative_rate","99.99");
		// String imgFilePath =
		// SystemUtil.class.getResource(thirdProperties.getImage_path()).getPath()
		// +json.get("citizen_id").toString()+".jpg";// 新生成的图片
		// try {
		// json.put("database_image_content",
		// Base64Util.getImageStrByCodec(imgFilePath));
		// } catch (IOException e1) {
		// e1.printStackTrace();
		// }
		faceCompareResponse.setChannelCode(ThirdProductChannelConstant.YITU.getCode());
		JSONObject json = new JSONObject();
		JSONObject userInfo = new JSONObject();
		JSONObject options = new JSONObject();
		JSONObject uploadIdcardImage = new JSONObject();
		JSONObject verifyQueryImage = new JSONObject();
		JSONObject verifyQueryImageUI = new JSONObject();
		JSONObject verifyQueryImageOp = new JSONObject();
		userInfo.put("name", map.get("name"));
		userInfo.put("citizen_id", map.get("citizen_id"));
		options.put("auto_rotate", false);
		uploadIdcardImage.put("user_info", userInfo);
		uploadIdcardImage.put("options", options);
		verifyQueryImageUI.put("query_image_package", map.get("query_image_content"));
		verifyQueryImage.put("user_info", verifyQueryImageUI);
		verifyQueryImageOp.put("auto_rotate", false);
		verifyQueryImageOp.put("true_negative_rate", "99.99");
		verifyQueryImageOp.put("query_image_package_check_same_person", true);
		verifyQueryImageOp.put("query_image_package_return_image_list", true);
		verifyQueryImageOp.put("query_image_package_check_anti_screen", true);
		verifyQueryImageOp.put("query_image_package_check_anti_screen_threshold", "high");
		verifyQueryImage.put("options", verifyQueryImageOp);
		json.put("upload_idcard_image", uploadIdcardImage);
		json.put("verify_query_image", verifyQueryImage);
		String result = "";
		try {
			result = HttpUtil.httpPostYT(thirdProperties.getYt_comparisonUrl(), json.toString());
			responseDate = new Date();
			MarvelsLogUtil.getInstance().info("===========>>依图人脸对比,loanId" + map.get("loanId"));
			if(!StringUtils.isEmpty(result)){
				status = LocalStatus.IN_DATABASE_FAIL.getCode();
				JSONObject resultJson = new JSONObject();
				resultJson = JSONObject.fromObject(result);
				String rtn = resultJson.get("rtn").toString();
				thirdCode = rtn;
				String message = resultJson.get("message").toString();
				if ("0".equals(rtn)) {
					JSONObject verifyResultJson = resultJson.getJSONObject("verify_result");
					MarvelsLogUtil.getInstance().info(">>>>>>>>依图人脸对比返回参数:"+verifyResultJson);
					if(verifyResultJson.getBoolean("is_pass")){
						faceCompareResponse.setScore(String.valueOf(verifyResultJson.getDouble("final_verify_score")));
					}else{
						faceCompareResponse.setScore("0.01");
					}
					faceCompareResponse.setChannelCode(ThirdProductChannelConstant.YITU.getCode());
					String query_image_package_result = resultJson.getString("query_image_package_result");
					JSONObject packageResult = JSONObject.fromObject(query_image_package_result);
					JSONArray jsonArray = JSONArray.fromObject(packageResult.get("query_image_contents"));
					faceCompareResponse.setCompareResultPicture(jsonArray);
					boolean isAntiScreenCheckPassed=packageResult.getBoolean("is_anti_screen_check_passed");
					faceCompareResponse.setIsAntiScreenCheckPassed(isAntiScreenCheckPassed);
					if (!PropertiesUtils.isTurnOffForSwitch("switch.face.contrast.remake")) {//不做校验
						if(isAntiScreenCheckPassed){//不是翻拍
							faceCompareResponse.setErrorCode(0);
							faceCompareResponse.setErrorMsg("识别成功");
						}else{
							faceCompareResponse.setErrorCode(-1);
							faceCompareResponse.setErrorMsg("请勿使用翻拍");
						}
					}else{
						faceCompareResponse.setErrorCode(0);
						faceCompareResponse.setErrorMsg("识别成功");
					}
					status = LocalStatus.SUCCESS_WITH_DATA.getCode(); // 查询成功且有数据
				} else {
					faceCompareResponse.setErrorCode(-1);
					faceCompareResponse.setErrorMsg(message);
					status = LocalStatus.CALL_SUCCESS.getCode(); // 调用成功但业务数据返回非成功状态
				}
				
			}
		} catch (Exception e) {
			MarvelsLogUtil.getInstance().error("===========>>依图人脸对比响应,loanId" + map.get("loanId") + ",异常",e);
			faceCompareResponse.setErrorCode(-1);
			faceCompareResponse.setErrorMsg("依图人脸对比,loanId" + map.get("loanId") + ",响应异常");
		}
		// 记入统一日志表
		saveDataQueryLog(null,
				map.get("loanId"), null, null, startDate, responseDate, ThirdMethodConstants.YT0002, thirdCode,
				status, "edc_yt_data_query_log", "system");
		return faceCompareResponse;
	}

	@Override
	public FaceCompareResponse ocrUniversalInterface(Map<String, String> map) {
		FaceCompareResponse faceCompareResponse = new FaceCompareResponse();
		/*
		 * 如果接口停用，直接返回（视具体情况，有的返回停用，有的返回相关值） ADD BY TUXU 2018-05-31
		 */
		if (PropertiesUtils.isTurnOffForSwitch("switch.yt0003")) {
			// RespStatus.DISABLE只有接口停用时才使用定义的这个参数，其它情况按原本的来
			faceCompareResponse.setErrorCode(RespStatus.DISABLE.getCode());
			faceCompareResponse.setErrorMsg(RespStatus.DISABLE.getMsg());
			return faceCompareResponse;
		}
		String status = LocalStatus.REQUEST_FAIL.getCode(); // 默认请求失败
		String thirdCode = null;
		Date startDate = new Date();
		Date responseDate = null;
		ThirdProperties thirdProperties = ThirdPropertiesInitUtil.getThirdProperties();
		JSONObject jsonObject = new JSONObject();
		JSONObject imageContent = new JSONObject();
		imageContent.put("image_content", map.get("imageContent"));
		jsonObject.put("user_info", imageContent);
		JSONObject options = new JSONObject();
		options.put("ocr_type", 1);// 识别的类型，包括如下几种：1: 翻拍身份证照2： 驾驶证3： 行驶证
		options.put("auto_rotate", true);// 开启自动旋转矫正(目前只支持身份证OCR)
		options.put("ocr_mode", Integer.parseInt(map.get("ocrMode")));// 1.身份证正面
																		// 2.身份证背面
		jsonObject.put("options", options);
		MarvelsLogUtil.getInstance().info("===========>>依图OCR通用接口请求:" + options.toString());
		String result = "";
		OcrResult ocrResult = new OcrResult();
		try {
			result = HttpUtil.httpPostYT(thirdProperties.getYt_ocr_Universal(), jsonObject.toString());
			responseDate = new Date();
			MarvelsLogUtil.getInstance().info("===========>>依图OCR通用接口返回:" + result);
			if(!StringUtils.isEmpty(result)){
				status = LocalStatus.IN_DATABASE_FAIL.getCode();
				ocrResult = JSON.parseObject(result, OcrResult.class);
				thirdCode = ocrResult.getRtn();
				if (!ocrResult.getRtn().equals("0")) {
					faceCompareResponse.setErrorCode(-1);
					faceCompareResponse.setErrorMsg("身份证ocr识别失败");
					
					status = LocalStatus.CALL_SUCCESS.getCode(); // 调用成功但业务数据返回非成功状态
				} else {
					IdCardOcrResult idCardOcrResult = new IdCardOcrResult();
					idCardOcrResult.setAddress(ocrResult.getIdcardOcrResult().getAddress());
					idCardOcrResult.setAuthority(ocrResult.getIdcardOcrResult().getAgency());
					
					idCardOcrResult.setGender(ocrResult.getIdcardOcrResult().getGender());
					idCardOcrResult.setName(ocrResult.getIdcardOcrResult().getName());
					idCardOcrResult.setNation(ocrResult.getIdcardOcrResult().getNation());
					idCardOcrResult.setNumber(ocrResult.getIdcardOcrResult().getCitizenId());
					if(ocrResult.getIdcardOcrResult().getIdcardType().equals("1")){//正面
						idCardOcrResult.setSide("front");
						idCardOcrResult.setYear(ocrResult.getIdcardOcrResult().getBirthday().substring(0,4));
						idCardOcrResult.setMonth(ocrResult.getIdcardOcrResult().getBirthday().substring(5, 7));
						idCardOcrResult.setDay(ocrResult.getIdcardOcrResult().getBirthday().substring(8, 10));
					}else if(ocrResult.getIdcardOcrResult().getIdcardType().equals("2")){//背面
						idCardOcrResult.setSide("back");
						idCardOcrResult.setTimelimit(ocrResult.getIdcardOcrResult().getValidDateBegin()+"-"+ocrResult.getIdcardOcrResult().getValidDateEnd());
					}else{
						idCardOcrResult.setSide("auto");
					}
					
					
					faceCompareResponse.setErrorCode(0);
					faceCompareResponse.setErrorMsg("请求成功");
					MarvelsLogUtil.getInstance().info("===========>>依图OCR通用接口调用正常返回");
					
					if(StringUtils.isBlank(map.get("freshVersion")) || map.get("freshVersion").equals("0")){//老版本
						faceCompareResponse.setOcrResult(ocrResult);
					}else{
						faceCompareResponse.setOcrResult(idCardOcrResult);
					}
					
					status = LocalStatus.SUCCESS_WITH_DATA.getCode(); // 查询成功且有数据
				}
			}
			
		} catch (Exception e) {
			MarvelsLogUtil.getInstance().error("===========>>依图OCR通用接口调用响应异常",e);
			faceCompareResponse.setErrorCode(-1);
			faceCompareResponse.setErrorMsg("依图OCR通用接口调用响应异常");
		}
		// 记入统一日志表
		saveDataQueryLog(null,
				map.get("loanId"), null, null, startDate, responseDate, ThirdMethodConstants.YT0003, thirdCode,
				status, "edc_yt_data_query_log", "system");
		return faceCompareResponse;
	}

}
